import Vue from 'vue'
import Vuex from 'vuex'
import { getUserInfoAPI, getUserProfileAPI } from '@/api/userAPI.js'

Vue.use(Vuex)

let initState = {
  tokenInfo: {
    refresh_token: '',
    token: ''
  }, // 定义一个初始值
  userInfo: {},
  userProfile: {}
}
const stateStr = localStorage.getItem('state')// 从本地存储中读取数据，
if (stateStr) {
  initState = JSON.parse(stateStr)// 如果不为空 就赋值给初始值
}
export default new Vuex.Store({

  state: initState,
  mutations: {
    // 修改数据源需要在mutainos中定义方法
    updataTokenInfo (state, payload) {
      state.tokenInfo = payload
      // 把修改过后的数据源持续存储到本地存储中
      localStorage.setItem('state', JSON.stringify(state))
    },
    // 更新 userInfo 的方法
    updateUserInfo (state, payload) {
      // 1. 把用户信息转存到 state 中
      state.userInfo = payload
      // 2. 将最新的 state 对象持久化存储到本地
      localStorage.setItem('state', JSON.stringify(state))
    },
    updateuserProfile (state, payload) {
      // 1. 把用户信息转存到 state 中
      state.userProfile = payload
      // 2. 将最新的 state 对象持久化存储到本地
      localStorage.setItem('state', JSON.stringify(state))
    },
    // / 清空 vuex 和本地的数据
    cleanState (state) {
      // 1. 清空 vuex 中的数据
      state.tokenInfo = {}
      state.userInfo = {}
      state.userProfile = {}

      // 2. 将清空后的 state 存储到本地
      localStorage.setItem('state', JSON.stringify(state))
    }
  },
  actions: {
    // 初始化用户的基本信息
    async initUserInfo (ctx) {
      // 调用 API 接口
      const { data: res } = await getUserInfoAPI()
      if (res.message === 'OK') {
        // TODO：把数据转交给 Mutation 方法   ctx.commit('Mutation方法名')
        ctx.commit('updateUserInfo', res.data)
      }
    },
    async initUserProFile (ctx) {
      // 调用API接口
      const { data: res } = await getUserProfileAPI()
      if (res.message === 'OK') {
        console.log(res.data)
        ctx.commit('updateuserProfile', res.data)
      }
    }
  },
  modules: {
  },
  getters: {
    // 用户头像的计算属性
    userAvatar (state) {
      // 默认的头像地址
      let imgSrc = 'https://img.yzcdn.cn/vant/cat.jpeg'

      // 如果用户信息对象中包含 photo 属性的值，则为 imgSrc 重新赋值
      if (state.userInfo.photo) {
        imgSrc = state.userInfo.photo
      }

      return imgSrc
    }
  }

})
